package com.unlcn.ils.kas.service.order;

import com.unlcn.ils.kas.dao.model.erp.VJmcKasFlowInfo;
import com.unlcn.ils.kas.dao.model.erp.VJmcKasOnwayTrack;
import com.unlcn.ils.kas.dao.model.order.*;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;

/**
 * 江铃股份订单调度 service
 * 
 * @author 罗必量
 */
public interface SharesOrderService {

    /**
     * 拉取股份订单
     */
    void getOrder();

    /**
     * 保存订单信息
     * 
     * @param orderOtdLog
     * @param orderOtdLogDetailList
     */
    String saveOrderInfo(OrderOtdLog orderOtdLog, List<OrderOtdLogDetail> orderOtdLogDetailList);

    /**
     * 保存跟踪在途
     * 
     * @param orderOtdLogDetailList
     */
    void saveDetail(OrderOtd orderOtd, List<OrderOtdLogDetail> orderOtdLogDetailList);

    /**
     * 计算剩余运输距离
     * 
     * @param orderOtd
     * @param orderOtdDetail
     * @return
     */
    Number computationalDistance(OrderOtd orderOtd, OrderOtdDetail orderOtdDetail);

    /**
     * 保存拉取订单异常
     * 
     * @param orderOtdException
     */
    void saveOrderException(OrderOtdException orderOtdException);

    /**
     * 转换跟踪订单
     * 
     * @param orderOtdLog
     * @param orderOtdList
     * @return
     */
    OrderOtd transformation(OrderOtdLog orderOtdLog, List<OrderOtd> orderOtdList);

    /**
     * 计算距离和预计送达时间
     * 
     * @param orderOtd
     * @return
     */
    Date expectedArrivalTime(OrderOtd orderOtd);

    /**
     * 获取两地距离
     * 
     * @param startAddress
     * @param endAddress
     * @return
     */
    Double getDistance(String startAddress, String endAddress);

    /**
     * 将ResponseEntity结果转换成map集合
     * 
     * @param result
     * @return
     */
    List<Map> getMap(String result);

    /**
     * 格式化在途信息
     * 
     * @param map
     * @return
     */
    OrderOtdLogDetail analysisOnWayInfo(Map map);

    /**
     * 格式化订单
     * 
     * @param map
     * @return
     */
    OrderOtdLog analysisOrder(Map map);

    /**
     * 拉取股份订单 使用中间表方式拉取订单
     */
    void getOrder2(int thread);

    /**
     * 封装orderOtdLog
     * 
     * @param vJmcKasFlowInfo
     * @return
     */
    OrderOtdLog analysisOrder(VJmcKasFlowInfo vJmcKasFlowInfo);

    /**
     * 封装OrderOtdLogDetail
     * 
     * @param vJmcKasOnwayTrack
     * @return
     */
    OrderOtdLogDetail analysisOnWayInfo(VJmcKasOnwayTrack vJmcKasOnwayTrack);

    /**
     * 当数据更新途径不为ERP(为手工或excel导入)且运抵时间不为空时,不需要更新数据
     *
     */
    boolean isNotRequireUpdate(List<OrderOtd> kasDataStatus);

    /*
     * @Description: 处理OTM中间表数据
     * 
     * @Author: zharui
     */
    void dealMiddle(List<VJmcKasFlowInfo> lst);

    /*
     * @Description: 更新主表的最新位置,最新在途时间，预计运抵时间
     * 
     * @Author: zharui
     */
    void updateNewestPositionRelInfo(String sysOrderNo);

    /*
     * @Description:查询需要更新预计在途时间的订单
     * 
     * @Author: zharui
     */
    List<OrderOtd> getNeedRefreshOrders();
}
